package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IFormGroupFieldDAO;
import org.jsola.hr.dto.FormGroupFieldAddDTO;
import org.jsola.hr.dto.FormGroupFieldUpdateDTO;
import org.jsola.hr.entity.FormGroupFieldDO;
import org.jsola.hr.query.FormGroupFieldQuery;
import org.jsola.hr.vo.FormGroupFieldListVO;
import org.jsola.hr.vo.FormGroupFieldVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 表单字段
 *
 * @author zhr
 */
public interface IFormGroupFieldService extends IService<IFormGroupFieldDAO, FormGroupFieldDO> {

    /**
     * 新增表单字段
     *
     * @param formGroupFieldAddDTO 新增表单字段DTO
     * @param tokenUser            当前用户
     * @return 表单字段详情信息
     */
    FormGroupFieldVO save(FormGroupFieldAddDTO formGroupFieldAddDTO, TokenUser tokenUser);

    /**
     * 批量新增表单字段
     *
     * @param formGroupFieldAddDTOList 新增表单字段DTO
     * @param tokenUser                当前用户
     * @return 表单字段详情信息
     */
    List<FormGroupFieldVO> batchSave(List<FormGroupFieldAddDTO> formGroupFieldAddDTOList, TokenUser tokenUser);

    /**
     * 批量保存
     *
     * @param insertList 保存列表
     */
    void batchSaveDO(List<FormGroupFieldDO> insertList);

    /**
     * 修改表单字段
     *
     * @param formGroupFieldUpdateDTO 修改表单字段DTO
     * @param tokenUser               当前用户
     * @return 更新数量
     */
    int update(FormGroupFieldUpdateDTO formGroupFieldUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除表单字段，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser         当前用户
     * @param formGroupFieldIds 表单字段id
     * @param check             是否做校验
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, Boolean check, Long... formGroupFieldIds);

    /**
     * 批量删除表单字段，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser         当前用户
     * @param formGroupFieldIds 表单字段id
     * @param check             是否做校验
     * @return 删除数量
     */
    int deleteByIds2(TokenUser tokenUser, Boolean check, Long... formGroupFieldIds);

    /**
     * 根据表单字段id查找
     *
     * @param formGroupFieldId 表单字段id
     * @param siteId           所属站点id
     * @return 表单字段详情信息
     */
    FormGroupFieldVO selectById(Long formGroupFieldId, String siteId);

    /**
     * 查询表单字段
     *
     * @param formGroupFieldQuery 查询条件
     * @param siteId              所属站点id
     * @return 表单字段列表信息
     */
    List<FormGroupFieldListVO> select(FormGroupFieldQuery formGroupFieldQuery, String siteId);

    /**
     * 查询表单字段记录数
     *
     * @param formGroupFieldQuery 查询条件
     * @param siteId              所属站点id
     * @return 表单字段记录数
     */
    int selectCount(FormGroupFieldQuery formGroupFieldQuery, String siteId);

    /**
     * 分页查询表单字段
     *
     * @param formGroupFieldQuery 查询条件
     * @param siteId              所属站点id
     * @return 表单字段列表信息
     */
    Page<FormGroupFieldListVO> selectPage(FormGroupFieldQuery formGroupFieldQuery, String siteId);


    /**
     * 根据表单字段id查找
     *
     * @param formGroupFieldId 表单字段id
     * @param siteId           所属站点id
     * @return 表单字段
     */
    FormGroupFieldDO selectDOById(Long formGroupFieldId, String siteId);

    /**
     * 查询表单字段
     *
     * @param formGroupFieldQuery 查询条件
     * @param siteId              所属站点id
     * @return 表单字段列表
     */
    List<FormGroupFieldDO> selectDO(FormGroupFieldQuery formGroupFieldQuery, String siteId);

    /**
     * 根据subjectIdList查询字段
     *
     * @param subjectIdList subjectIdList
     * @param subjectType   subjectType
     * @return 字段列表
     */
    List<FormGroupFieldDO> selectBySubjectIdList(List<String> subjectIdList, String subjectType);

    /**
     * 根据条件查询字段及字段内容
     *
     * @param query     查询条件
     * @param tokenUser 当前用户
     * @return 字段及内容
     */
    List<FormGroupFieldVO> selectFieldAddContentByQuery(FormGroupFieldQuery query, TokenUser tokenUser);
}


